home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / a_utils / ffccflow / ffccflow.lha / ffccc+flow / flow / vmsflow.for < prev   
Encoding:
Text File  |  1992-07-31  |  5.2 KB  |  184 lines

  1.       PROGRAM FLOW
  2.       INCLUDE 'params.h'
  3.       INCLUDE 'jobcom.h'
  4.       INCLUDE 'lunits.h'
  5.       INCLUDE 'trecom.h'
  6.       INCLUDE 'ignore.h'
  7. C
  8.       INTEGER*4 STATUS,CLI$GET_VALUE,CLI$PRESENT
  9.       INTEGER*4 LIB$FIND_FILE,LIB$FIND_FILE_END
  10.       INCLUDE '($SSDEF)'
  11.       INCLUDE '($RMSDEF)'
  12.       INCLUDE '($LBRDEF)'
  13.       EXTERNAL CLI$_PRESENT,CLI$_DEFAULTED,CLI$_ABSENT,CLI$_NEGATED
  14.       CHARACTER*(MXLIN) CIN
  15.       CHARACTER*(MXLIN) CFLOP
  16.       CHARACTER*(MXLIN) CTEMPL
  17.       CHARACTER*1024 CLONG
  18.       LOGICAL LOG
  19.       CHARACTER*(MLEN) CMMND
  20. C
  21.       LOG = .FALSE.
  22.       LPRINT = .FALSE.
  23.       LDEBUG = .FALSE.
  24.       NIGNO = 0
  25. C
  26. C LOG
  27. C
  28.       STATUS = CLI$PRESENT('LOG')
  29.       IF(STATUS.EQ.%LOC(CLI$_PRESENT).OR.
  30.      &   STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  31.         LOG = .TRUE.
  32.       ENDIF
  33. C
  34. C INPUT TREE FROM FLOPPY
  35. C
  36.       ITREE = 0
  37.       STATUS = CLI$PRESENT('P1')
  38.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  39.         STATUS = CLI$GET_VALUE('P1',CIN)
  40.         IF(.NOT.STATUS) STATUS = LIB$STOP(%VAL(STATUS))
  41.         STATUS = LIB$FIND_FILE(CIN,CFLOP,I,'flow.floptre')
  42.         IF(.NOT.STATUS) STATUS = LIB$STOP(%VAL(STATUS))
  43.         STATUS = LIB$FIND_FILE_END(I)
  44.         ITREE = 1
  45.         IF(LOG)WRITE(6,'(A,A)')' Flow --> Input FLOPPY data:',
  46.      &  CFLOP(:LENOCC(CFLOP))
  47.         LINTRE = 50
  48.         OPEN(LINTRE,FILE=CFLOP,ACCESS='SEQUENTIAL',READONLY,
  49.      &  FORM='UNFORMATTED',STATUS='OLD',ERR=999)
  50.       ENDIF
  51. C
  52. C QUERY TREE
  53. C
  54.       LQERY = .FALSE.
  55.       STATUS = CLI$PRESENT('QUERY')
  56.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  57.         LQERY = .TRUE.
  58.         IF(LOG)WRITE(6,'(A)') ' Flow --> Queries on the tree'
  59.       ENDIF
  60. C
  61. C COMMON BLOCK TABLE
  62. C
  63.       LCOMM = .FALSE.
  64.       STATUS = CLI$PRESENT('COMMON_TABLE')
  65.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  66.         LCOMM = .TRUE.
  67.         IF(LOG)WRITE(6,'(A)') ' Flow --> Produce COMMON table'
  68.         STATUS = CLI$GET_VALUE('COMMON_TABLE',CIN)
  69.         CCOMM = 'PROCOM.DAT'
  70.         IF(STATUS.NE.%LOC(CLI$_ABSENT)) CCOMM = CIN
  71.         IF(LOG)WRITE(6,'(A,A)')
  72.      &' Flow --> write COMMON table to:',CCOMM(:LENOCC(CCOMM))
  73.         LOUTCO = 60
  74.         OPEN(LOUTCO,FILE=CCOMM,STATUS='NEW',ERR=999)
  75.       ENDIF
  76. C
  77. C TREE
  78. C
  79.       LTREE = .FALSE.
  80.       STATUS = CLI$PRESENT('STRUCTURE_CHART')
  81.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  82.         LTREE = .TRUE.
  83.         IF(LOG)WRITE(6,'(A)') ' Flow --> Produce Text Structure Chart'
  84.         STATUS = CLI$GET_VALUE('STRUCTURE_CHART',CIN)
  85.         CHART = 'PROTRE.DAT'
  86.         IF(STATUS.NE.%LOC(CLI$_ABSENT)) CHART = CIN
  87.         IF(LOG)WRITE(6,'(A,A)')
  88.      &' Flow --> write Structure Chart to: ',CHART(:LENOCC(CHART))
  89.         LOUTRE = 61
  90.         OPEN(LOUTRE,FILE=CHART,STATUS='NEW',ERR=999)
  91.       ENDIF
  92. C
  93. C IGNORE NAMES
  94. C
  95.       STATUS = CLI$PRESENT('IGNORE')
  96.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  97.    60   STATUS = CLI$GET_VALUE('IGNORE',CLONG)
  98.         IF(STATUS.NE.%LOC(CLI$_ABSENT)) THEN
  99.            NIGNO = NIGNO + 1
  100.            LLONG = LENOCC(CLONG)
  101.            CIGNO(NIGNO) = CLONG(:LLONG) 
  102.            LIGNO(NIGNO) = LLONG
  103.            GOTO 60
  104.         ENDIF
  105.         IF(LOG) WRITE(6,'(A)') ' Flow --> Ignore modules:'
  106.         IF(LOG) WRITE(6,'(10X,6A8)') (CIGNO(IG),IG=1,NIGNO)
  107.       ENDIF
  108. C
  109. C Graphics Structure Chart
  110. C
  111.       LCHRT = .FALSE.
  112.       STATUS = CLI$PRESENT('GRAPHICS')
  113.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  114.         STATUS = CLI$GET_VALUE('GRAPHICS',CIN)
  115.         LOUTCH = 96
  116.         CGRAPH = 'FLOW.PS'
  117.         IF(STATUS) CGRAPH = CIN
  118.         IF(LOG)WRITE(6,'(A,A)') ' Flow --> Chart name:',
  119.      &                 CGRAPH(:LENOCC(CGRAPH))
  120.         LCHRT = .TRUE.
  121.         OPEN(LOUTCH,FILE=CGRAPH(:LENOCC(CGRAPH)),STATUS='NEW',
  122.      &       CARRIAGECONTROL='LIST',ERR=999)
  123.       ENDIF
  124. C
  125. C NOEXTERNALS
  126. C
  127.       LEXT =.FALSE.
  128. C
  129.       IF(.NOT.LTREE.AND..NOT.LCHRT) GOTO 5
  130. C
  131.       STATUS = CLI$PRESENT('EXTERNALS')
  132.       IF(STATUS.EQ.%LOC(CLI$_NEGATED)) THEN
  133.         IF(LOG)WRITE(6,'(A)')
  134.      &  ' Flow --> Suppress external routines from the chart'
  135.         LEXT = .FALSE.
  136.       ELSE
  137. C
  138. C EXTERNALS
  139. C
  140.         IF(LOG)WRITE(6,'(A)')
  141.      &  ' Flow --> Include external routines in the chart'
  142.         LEXT = .TRUE.
  143.       ENDIF
  144. C
  145. C NODE
  146. C
  147.       STATUS = CLI$PRESENT('NODE')
  148.       IF(STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  149.         CTREE = '$$$$'
  150.         IF(LOG)WRITE(6,'(A)') ' Flow --> Take first node found'
  151.       ELSE IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  152.         STATUS = CLI$GET_VALUE('NODE',CIN)
  153.         IF(STATUS.NE.%LOC(CLI$_ABSENT)) THEN
  154.           CTREE = CIN(:LENOCC(CIN))
  155.           IF(LOG)WRITE(6,'(A,A)')' Flow --> Start chart from:',
  156.      &    CTREE(:LENOCC(CTREE))
  157.         ELSE
  158.           CTREE = '$$$$'
  159.           IF(LOG)WRITE(6,'(A)') ' Flow --> Take first node found'
  160.         ENDIF
  161.       ENDIF
  162.     5 CONTINUE
  163. C
  164.       IF(LOG)WRITE(6,'(A)')
  165.      &' Flow --> Finished parsing command string'
  166. C
  167.       CALL PRODES
  168. C
  169.       IF(LCHRT) CLOSE(LOUTCH)
  170.       IF(LCOMM) CLOSE(LOUTCO)
  171.       IF(LTREE) CLOSE(LOUTRE)
  172.       CLOSE(LINTRE)
  173. C
  174.       GOTO 1000
  175.   999 CONTINUE
  176.       WRITE(6,500)
  177.   500 FORMAT(//,1X,'***********************************************',
  178.      &        /,1X,'*                 F  L  O  W                  *',
  179.      &        /,1X,'*                   ABORTED                   *',
  180.      &        /,1X,'*          in job preparation stage.          *',
  181.      &        /,1X,'***********************************************')
  182.  1000 CONTINUE
  183.       END
  184.